package cc.lucien.demo210423;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Stack;

/**
 * 有效括号判断
 */
public class Demo02 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        System.out.println(isValid(string));
    }

    public static boolean isValid(String string) {
        HashMap<Character,Character> hashMap = new HashMap<>();
        hashMap.put('(', ')');
        hashMap.put('[', ']');
        hashMap.put('{', '}');
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < string.length(); i++) {
            char curr = string.charAt(i); //遍历字符串，取出第 i 个元素
            if (hashMap.keySet().contains(curr)){ //如果是左括号压入到栈中
                stack.push(curr);
            } else if (hashMap.values().contains(curr)) { //是有括号就继续判断（筛掉非括号字符）
                if (stack.isEmpty()) //如果栈中没有元素，说明没有与之对应的左括号，false
                    return false;
                if (hashMap.get(stack.peek()).equals(curr)) //括号类型一样，匹配正确
                    stack.pop();  //这一对判断完成，弹出栈
                else
                    return false; // 括号类型不匹配，返回false
            }
        }
        return stack.isEmpty(); //栈为空，说明一一对应，返回true,否则返回 false
    }
}
